# -*- coding: utf-8 -*-
#
# Основано на коде babeldjango/templatetags/babel.py.
# Отличается от оригинала выброшенным кодом приведения времени из UTC
# в локальный часовой пояс. Если дата хранится уже в локальном времени,
# преобразовывать ее не нужно. Со хранением даты в utc у джанги, похоже,
# проблемы: это значение никуда не преобразовывается. Так что чтобы время
# не отставало (происходит, если хранить дату в UTC) и чтобы не убегало
# (происходит, если и без того смещенную на +3 часа дату babel смещает
# еще на три часа), и существует этот хак.
#
# Copyright (C) 2007 Edgewall Software
# All rights reserved.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
# are also available at http://babel.edgewall.org/wiki/License.
#
# This software consists of voluntary contributions made by many
# individuals. For the exact contribution history, see the revision
# history and logs, available at http://babel.edgewall.org/log/.

import datetime

from django.conf import settings
from django.template import Library
from django.utils.translation import to_locale

from babeldjango.middleware import get_current_locale

babel = __import__('babel', {}, {}, ['core', 'support'])
Format = babel.support.Format
Locale = babel.core.Locale

register = Library()

def _get_format():
    locale = get_current_locale()
    if not locale:
        locale = Locale.parse(to_locale(settings.LANGUAGE_CODE))
    return Format(locale)

def datefmt(date=None, format='medium'):
    return _get_format().date(date, format=format)
datefmt = register.filter(datefmt)

def datetimefmt(datetime=None, format='medium'):
    return _get_format().datetime(datetime, format=format)
datetimefmt = register.filter(datetimefmt)

def timefmt(time=None, format='medium'):
    return _get_format().time(time, format=format)
timefmt = register.filter(timefmt)

@register.filter
def humanized_datetimefmt(datetime):
    if datetime.today().date() == datetime.date():
        return timefmt(datetime)
    else:
        return datetimefmt(datetime)


